Dart基础语法(看完这一篇就够了) 您所在的位置:网站首页 get on语法 Dart基础语法(看完这一篇就够了)

Dart基础语法(看完这一篇就够了)

2024-03-26 10:39| 来源: 网络整理| 查看: 265

Dart语言集百家之长,用的时候你就能感觉到会有很多语言的影子,如果本身已经有java,kotlin等语言基础,学dart语言花个几个小时看一下就可以了,剩下的就是多练习练习,熟悉dart语言的语法,目前dart主要用于Flutter开发。以下是几点重要的概念:

Dart 是强类型语言,但是又兼有 JS 的动态性 类型声明是可选的,可通过类型推导而来 语句以分号结尾,不能省略 1.变量

与java相比String,int,bool,double基本上都一样,其中String单引号和双引号都可以用

String str = "测试"; String str ='测试'; int a = 10; double b = 20.2; bool bl = true; //num是数值类型 num d = 20;

可以用var 声明一个变量,一旦赋值,类型就不能再改变,但值可以变化

var dd = "10"; var a = 30;

dynamic和Object

1、Object 是dart所有对象的根基类,也就是说所有类型都是Object的子类,所以任何类型的数据都可以赋值给Object声明的对象. 2、dynamic与var一样都是关键词,声明的变量可以赋值任意对象. 而dynamic与Object相同之处在于,他们声明的变量可以在后期改变赋值类型.

dynamic a = 30; a = "测试dynamic";

dart只有public和private权限,没有提供关键字声明,默认public,想要实现private,可以在变量名前加一个_,例如:

var a = 10;//public var _b = 20; //private

字符串拼接:dart字符串拼接有多种方式

String s1 = "First string....."; String s2 = " Second string" + "ddd"; print(s1 + s2); // First string..... Second stringddd // 使用换行符以及空格 String str2 = '单引号符串' '换行了' '再加空格' '拼接'; print("str2:$str2");// 输出结果:单引号符串换行了再加空格拼接 // 单双引号 空格拼接 String str3 = "单双引号空格字符串" '拼接' "~"; print("str3:$str3");// 输出结果:单双引号字符串空格拼接~ // 单双引号 换行符以及空格 String str4 = "单双引号符串\n" '换行了' '再加空格' '拼接'; print("str4:$str4"); // 输出结果:单双引号符串 //换行了再加空格拼接

dart还有一些很方便的语法结构,与java不同,类似kotlin,以下举例

int x = 12; double y = 0; x.toDouble(); y.toInt(); x.compareTo(y);

List:dart的list相当于java数组和list的集合体,dart中集合和数组都用list来表示

List list = [];//初始化一个空的集合,不需要new关键字 List list = [1,2,3,6]; list.add(3); list.removeAt(0);

map:map初始化只需要{}就可以,不需要new关键字,具体存取用法与java类似

var map = {} var map = { 'key1' : 'value1', 'key2': 'value2', 'key3' : 'value3' }; map['key4'] = 'value4'; map['key5'] = 'value5'; map['key6'] = 'value6';

enum 枚举

enum Color { red, green, blue }

for循环

var list = [7, 4, 3, 'Dart', true]; //forEach list.forEach((element) { print(element); }); //for..in for (var item in list) { print(item); } //与java一样 for (var i=0;i print('无参匿名函数');相当于anonFunc1(){print('无参匿名函数');}; //有参匿名函数 anonFunc(name,type) => 'I am $name 类型:$type'; print(anonFunc('dart',2)); // 输出结果: I am damon //anonFunc(name,type) => 'I am $name 类型:$type'; 相当于 anonFunc(name,type){ // 'I am $name 类型:$type'; // };

函数可选参数:与java不同,dart中不支持重载,java支持方法重载,dart想要实现java类似的效果,可以通过可选参数来实现

selectFunction("张三"); selectFunction("李四",type: 1); selectFunction("王五",type: 1,money: 83.2); void selectFunction(String name,{int? type,double? money}){ print("名字:$name--类型:$type--金额:$money"); } //注意dart可选参数必须要加?来表示该参数默认值为null,如果去掉?可以手动写个默认值,例如 void selectFunction(String name,{int type = 0,double? money}){ print("名字:$name--类型:$type--金额:$money"); } //输出结果:名字:张三--类型:null--金额:null //名字:李四--类型:1--金额:null //名字:王五--类型:1--金额:83.2

断言assert

//如果fullName是空的话,继续往下执行,否则打断代码执行 var fullName = ''; assert(fullName.isEmpty); print("fullname"+fullName);

异常:dart异常(或异常事件)是在执行程序期间出现的问题。发生异常时,程序的正常流程中断,程序/应用程序异常终止。 与Java相反,所有的dart异常都是未受检异常。也就是说当调用一个可以抛出异常的方法时,不必一定去捕获这个异常。这点和Kotlin一样,都是为了简化代码,增加可读性。如果你担心这段代码真的会产生什么异常,那么可以自行捕获。 Dart2的异常是Exception或者Error(包括它们的子类)的类型,甚至可以是非Exception或者Error类,也可以抛出,但是不建议这么使用。 Exception主要是程序本身可以处理的异常,比如:IOException。我们处理的异常也是以这种异常为主。 Error是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 DartVM出现的问题。比如:内存溢出(OutOfMemoryError)等等。

//异常抛出 void testAge(int age) { if (age < 10) { // throw new FormatException("年龄不能小于 10"); throw FormatException("年龄不能小于 10"); } } //异常捕获 void finallyCatchStatementBlock() { int x = 18; int y = 0; int res; try { res = x ~/ y; } on IntegerDivisionByZeroException { print("Cannot divide by zero"); } finally { print("Finally block executed"); } } 4.继承关系

dart有三种方式,分别是extends(继承),with(混入) ,implements(实现),三种可以混合使用,其中with,implements后可以多继承,用逗号隔开,extends后面只能跟一个,优先级顺序为with>extends>implements,当with,implements后跟了多个的时候,优先级最右边大于左边,依次类推,例如extends a with b,c implements d,h,优先级为c>b>a>h>d;

注意:dart无interface关键字,一般实现接口都用抽象类abstract

void main() { Son2 son2 = Son2(); son2.getName();//输出结果:香蕉类 } class Fruit { void getName() { print("水果类"); } } class Apple { void getName() { print("苹果类"); } } class Banana { void getName() { print("香蕉类"); } } class Tangerine { void getName() { print("橘子类"); } } abstract class Drink { void getName() { print("饮料类"); } } class Son2 extends Fruit with Apple,Banana implements Drink {} 5.操作符

算术操作符:除法结果取整: ~/

var a =5; var b =2; print(a/b); //输出结果:2.5 print(a~/b); //输出结果:2

相等操作符 无三等号操作符,双等号操作符比较的是内容是否相同,而不是内存地址,如果要比较内存地址是否相同,可以用 identical

var c = 3; var d = 3; print(d == c);

类型判定操作符:对比java as:类型转换;is 相当于 instanceof;

var c = 3; if (c is String) { print("string类型"); } (c as String).isNotEmpty;

赋值操作符:使用 = 操作符来赋值。 但是还有一个 ??= 操作符用来指定 值为 null 的变量的值

String value = "赋值"; var v1 =""; dynamic v2 = "初始值"; v1 = value; // 给 a 变量赋值 v2 ??= value; // 如果 b 是 null,则赋值给 b; 如果不是 null,则 b 的值保持不变 print('$v2');

条件表达式:?? 判断是否为空,为空执行??后面的内容

var v1 ="为空"; dynamic v2 = "初始值"; v2 = null; var v3 = v2 ?? v1; // v2 为 null 时执行v1 print('$v3'); //输出结果:为空

级联操作符:级联操作符 (..) 可以在同一个对象上 连续调用多个函数以及访问成员变量(可以想象一下设计模式中的构建者模式,但是与构建者模式概念完全不一样,写法上类似)。

StringBuffer stringbuffer = StringBuffer(); stringbuffer ..write('开始') ..write('学习') ..write('\n') ..writeln('dart'); print(stringbuffer);

运算符重载:与c++运算符重载基本相同,比如string,int之间的+,-,>,=等内部都是通过运算符重载来实现,java内部其实已经帮我们实现了,dart中的基础运算也帮我们实现了(可以查看一下dart源码),但是dart也把运算符重载提供了出来

Point point = Point.xy(1, 2); Point point1 = Point.xy(2, 4); point = point + point1; print("运算符重载x=${point.x},y=${point.y}");//输出结果:运算符重载x=3,y=6 class Point { int x = 0; int y = 0; Point(); Point.xy(this.x,this.y); // 运算符重载 Point operator +(Point point) { Point newPotin = Point(); newPotin.x = x + point.x; newPotin.y = y + point.y; return newPotin; } }

dart还有许多很方便的用法,与java,kotlin,javaScript等多种语言上很多比较方便的语法都结合在一起,这里就不多介绍了,掌握上面的基本语法后,结合自己的语法经验,实际项目使用很快就能发现出来。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有